package com.edou.system.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.json.simple.JSONObject;

import com.edou.base.page.PageResult;
import com.edou.system.dto.SysRegionCondition;
import com.edou.system.entity.SysRegion;

public interface ISysRegionService {
	
	/**
	 * 查询所有省份
	 * @return
	 */
	List<SysRegion> listProvinceAll();

	/**
	 * 分页查询
	 * @param pageResult 分页对象
	 * @param condition 查询条件类
	 */
	void listSysRegionByPage(PageResult<SysRegion> pageResult,SysRegionCondition condition);
	
	/**
	 * 分页大区的详情查询
	 * @param pageResult 分页对象
	 * @param condition 查询条件类
	 */
	void listSysRegionAreaDetailByPage(PageResult<SysRegion> pageResult,SysRegionCondition condition);
	
	/**
	 * 查询适应门店
	 * @param condition
	 * @return
	 */
	List<SysRegion> listSysRegionsByCondition(SysRegionCondition condition);
	
	/**
	 * 查询所有区域
	 * @return
	 */
	List<SysRegion> listSysRegionAll();
	
	/**
	 * 根据区域ID，递归查询本级及上级所有区域
	 * @param regionId
	 * @return
	 */
	List<SysRegion> listRegionById(Long regionId);

	/**
	 * 通过父类条件得到下属级别的信息
	 * @param parentId
	 * @return
	 */
	List<SysRegion> listSysregionByCondition(SysRegionCondition condition);
	
	/**
	 * 通过areaId查询
	 */
	List<SysRegion> listSysRegionByAreaId(@Param("areaId")String areaId);
	
	/**
	 *  根据参数获得省市区
	 * @param condition
	 * @return
	 */
	List<SysRegion> listSysRegionByParam(SysRegionCondition condition);
	
	/**
	 * 根据ID查询
	 * @param id 主键
	 * @return 省市区基础表
	 */
	SysRegion getSysRegionById(Long id);
	/**
	 * 根据code查询城市
	 */
	SysRegion getSysRegionByCode(@Param("code")String code);
	/**
	 * 根据城市名字查询
	 */
	SysRegion getSysRegionByName(@Param("name")String name);
	
	/**
	 * 根据省市区查询
	 */
	SysRegion getSysRegionByAllName(String name);
	
	/**
	 * 查询
	 * @param parentId
	 * @param level
	 * @param name
	 * @return
	 */
	SysRegion getSysRegionByParentIdAndLevelAndName(Long parentId,Integer level,String name);
	
	/**
	 * 根据上级ID查询ID最大的一条数据
	 */
	SysRegion getSysRegionMaxIdByParentId(Long parentId);
	
	/**
	 * 封装省市区JSON对象
	 * @return
	 */
	JSONObject getRegionJSON();
	
	/**
	 * 解析当前ip真实省市区
	 * @param ip
	 * @return
	 */
	JSONObject getLocaltionJSON(String ip);

	/**
	 * 设置热门
	 */
	void setHot(Long[] ids,Integer status);
	
	/**
	 * 新增
	 * @param item 省市区基础表
	 */
	void add(SysRegion item);
	
	/**
	 * 批量新增（通过接口新增，所有信息都是手动新增）
	 * @param item 省市区基础表
	 */
	void addFromAPIBatch(List<SysRegion> itemList);

	/**
	 * 修改
	 * @param item 省市区基础表
	 */
	void update(SysRegion item);
	
	/**
	 * 批量设置区域
	 * @param ids
	 * @param areaId
	 */
	void batchFitArea(Long[] ids,String areaId);
	
	/**
	 * 设置区域
	 * @param condition
	 */
	void fitArea(SysRegionCondition condition);
	
	/**
	 * 移除设置的区域
	 * @param condition
	 */
	void removeArea(SysRegionCondition condition);
	
	/**
	 * 批量的移除已经设置的区域
	 * @param ids
	 * @param areaId
	 */
	void batchRemoveArea(Long[] ids);
	
	/**
	 * 根据ID集合批量删除
	 * @param ids ID集合
	 */
	void delByIds(Long[] ids);
	
	/**
	 * 区号导入
	 */
    String	importXls(String path);
}

